package com.github.common.extend.demo.config.filetask;

import java.time.temporal.TemporalUnit;

/**
 * 任务存储器
 * @author wangjj7
 * @date 2023/8/17
 * @description
 */
public interface TaskStorage {

    /**
     * 保存
     * @param taskDTO
     * @return
     */
    FileTask save(FileTask taskDTO);

    /**
     * 心跳刷新
     * @param id
     */
    void refreshHeartbeatTime(String id);

    /**
     * 进度刷新
     * @param id
     * @param rate
     */
    void refreshRate(String id, double rate);

    /**
     * 任务执行成功
     * @param fileTask
     * @return
     */
    boolean success(FileTask fileTask);

    /**
     * 任务执行失败
     * @param fileTask
     * @param failReason
     * @param e
     * @return
     */
    boolean fail(FileTask fileTask, String failReason, Exception e);

    /**
     * 查询可共享任务
     * @param fileTask
     * @return
     */
    FileTask getShare(FileTask fileTask);

    /**
     * 将心跳超时的任务置为失败
     * @param heartbeatTimeout
     * @param unit
     */
    void heartbeatTimeout(long heartbeatTimeout, TemporalUnit unit);

    /**
     * 查询
     * @param id
     * @return
     */
    FileTask get(String id);

}
